import axios from 'axios'
import store from '../store'
import {BASE_URL} from '../config/proxyIp'
import JSONBIG from 'json-bigint'
// eslint-disable-next-line
// import router from '../router'
import {message} from 'ant-design-vue'

axios.defaults.adapter = require('axios/lib/adapters/http')
axios.defaults.timeout = 600000
// 环境的切换
// if (process.env.NODE_ENV == 'development') {
//   axios.defaults.baseURL = 'https://www.baidu.com';
// } else if (process.env.NODE_ENV == 'debug') {
//   axios.defaults.baseURL = 'https://www.ceshi.com';
// } else if (process.env.NODE_ENV == 'production') {
//   axios.defaults.baseURL = 'https://www.production.com';
// }
let http = axios.create({
    transformResponse: [function (data) {
        try {
            return JSONBIG.parse(data)
        } catch (e) {
            return data
        }
    }]
})
http.interceptors.request.use(config => {
    // const token = store.state.user.token
    const token = localStorage.getItem('token');
    console.log('token', token)
    config.headers = {
        'authentication': token,
        'Content-Type': 'application/json'
    }
    return config
}, error => {
    return Promise.reject(error)
})
/**
 * 请求拦截
 * */
http.interceptors.request.use(config => {
    return config
}, error => {
    return Promise.error(error)
})

/**
 * 响应拦截
 * */
http.interceptors.response.use(response => {
    return response
}, error => {
    return Promise.reject(error)
})

/**
 * @param {String} url 路径
 * @param {String} method 请求方式
 * @param {String} baseUrl 请求地址
 * @param {Object} params 请求参数
 * @param {Object} headers 请求头配置
 * @param {number} timeout 请求时间
 **/
/**
 * 此处不能删，不然传值有问题，不要问为什么，自己百度，我也不知道
 * */
export const httpRequest = async ({url, method = 'get', params, timeout}) => {
    // eslint-disable-next-line no-async-promise-executor
    return new Promise(async (resolve, reject) => {
        try {
            const result = await http({
                url: BASE_URL + url,
                // url: url,
                params: (method === 'get' || method === 'delete') && params,
                data: ((method === 'post' || method === 'put') && params) || null,
                method: method,
                timeout: timeout || 60000
            })
            console.log('我请求的数据', result.data)
            console.log('我请求的数据码', result.data.errorCode)
            switch (result.data.resultCode) {
                case 0:
                    resolve(result.data)
                    break
                case 2000:
                    // token过期
                    message.error(result.data.resultMsg)
                    // store.commit('SET_REMOVE')
                   //  router.replace({path: '/login'})
                    break
                case 4001:
                    // 请求参数错误，比如格式错误
                    message.error(result.data.resultMsg)
                    break
                case 4002:
                    // 未授权访问信息
                    message.error(result.data.resultMsg)
                    // router.replace({path: '/Login'})
                    break
                case 4003:
                    // 未登录
                    message.error(result.data.resultMsg)
                    store.commit('SET_REMOVE')
                   // router.replace({path: '/Login'})
                    break
                case 4004:
                    // 访问数据不存在
                    message.error(result.data.resultMsg)
                    break
                case 4005:
                    // 请求太多，请稍后重试
                    message.error(result.data.resultMsg)
                    break
                case 5000:
                    // 后端通用错误
                    message.error(result.data.resultMsg)
                    break
                case 5001:
                    // 加密解密失败
                    message.error(result.data.resultMsg)
                    break
                case 5002:
                    // 加解锁异常
                    message.error(result.data.resultMsg)
                    break
            }
        } catch (error) {
            reject(error)
        }
    })
}

// import axios from 'axios'
// // import router from '@router/index.js'
// // import Cookies from 'js-cookie'
// import notification from 'ant-design-vue/es/notification'
// const token = localStorage.getItem('token');
//
// // 创建 axios 实例
// const service = axios.create({
//     baseURL: '/api', // api base_url
//     withCredentials: true,
//     timeout: 60000, // 超时时间：6分钟 注意和nginx配置保持一致
//     // maxBodyLength: 31457280,  // 请求体最大长度 单位B，上限30MB 注意和nginx配置保持一致
//     // maxContentLength: 5242880,  // 响应的最大长度，单位 B ，5MB，针对文件或者表格数据大量返回 注意和nginx配置保持一致
// })
//
// const err = (error) => {
//     if (error.response) {
//         const data = error.response.data
//         if (error.response.status === 401) { // 登录失效
//             localStorage.setItem('token', '');
//         } else if (error.response.status === 402) {  // 缺少权限
//             notification.error({
//                 message: '您没有权限查看当前信息',
//                 description: '请联系管理员获取数据权限',
//                 duration: null
//             })
//         } else if (error.response.status === 403) {
//             notification.error({
//                 message: 'Forbidden',
//                 description: data.message
//             })
//         } else if (error.response.status === 504) {  // 请求超时
//             notification.error({
//                 message: '提示',
//                 description: '请求时间较长，请稍后查看',
//                 duration: null
//             });
//         }
//     } else {
//         // 请求超时
//         notification.error({
//             message: '提示',
//             description: '请求时间较长，请稍后查看',
//             duration: null
//         });
//     }
//     return Promise.reject(error)
// }
//
// // 请求拦截，设置token
// service.interceptors.request.use((config) => {
//     config.headers['Access-Token'] = token
//     // Cookies.set('Access-Token', token);
//     return config
// }, err)
//
// // 处理响应
// service.interceptors.response.use((response) => {
//     console.log('响应的参数')
//     return response.data
// }, err)
//
// function requests(options = {}) {
//     return service.request({ ...options })
// }
//
// export { requests as httpRequest }
